package cn.tradewin.common.util;

//import java.io.IOException;
//import java.util.Properties;
//
//import net.rubyeye.xmemcached.MemcachedClient;
//import net.rubyeye.xmemcached.MemcachedClientBuilder;
//import net.rubyeye.xmemcached.XMemcachedClientBuilder;
//import net.rubyeye.xmemcached.command.BinaryCommandFactory;
//import net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator;
//import net.rubyeye.xmemcached.utils.AddrUtil;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import com.google.code.yanf4j.util.ResourcesUtils;

public class XmemcachedUtil {
//	private static Logger log = LoggerFactory.getLogger(XmemcachedUtil.class);
////	private static MemcachedClientBuilder builder = null;
////	private static MemcachedClient memcacheddClient = null;
//	private static Properties prop = null;
//
//	static {
//		try {
//			prop = ResourcesUtils
//					.getResourceAsProperties("memcached.properties");
//		} catch (IOException e) {
//			e.printStackTrace();
//			log.error("please configure memcached information in memcached.properties file");
//		}
//		if (prop != null) {
//			String addrs = prop.getProperty("addressList");
//			String weight = prop.getProperty("weights");
//			if (weight != null) {
//				String[] weightsArray = weight.split(",");
//				int len = weightsArray.length;
//				int[] weights = new int[len];
//				for (int i = 0; i < len; i++) {
//					weights[i] = Integer.parseInt(weightsArray[i]);
//				}
//				builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(addrs), weights);
//				// //standby 主备模式
//				// builder = new
//				// XMemcachedClientBuilder(AddrUtil.getAddressMap(addrs),
//				// weights);
//				// }else{
//				// builder = new
//				// XMemcachedClientBuilder(AddrUtil.getAddressMap(addrs));
//			}
//		} else {
//			log.error("请配置memcached服务地址!");
//		}
//
//		// 设置连接池大小，即客户端个数
//		// xmemcached是基于nio的，通常不要设置连接池，一个连接可以支撑绝大多数应用。
//		// 除非你的应用并发规模特别大，比如我压测的时候测试100个线程或者300个线程并发的时候，连接池才能显示出优势。
////		builder.setConnectionPoolSize(Integer.valueOf(prop.getProperty("connectionPoolSize")));
//		// 宕机报警
//		builder.setFailureMode(Boolean.valueOf(prop.getProperty("failureMode")));
//		// 使用二进制协议，默认使用的TextCommandFactory即文本协议
//		builder.setCommandFactory(new BinaryCommandFactory());
//
//		// 1.Standard Hash, hash(key) mod server_count (余数分布)
//		// 默认使用余数分布
//		// 2.Consistent Hash(一致性哈希)
//		builder.setSessionLocator(new KetamaMemcachedSessionLocator());
//		// 3.Election Hash(选举散列)
//		// builder.setSessionLocator(new ElectionMemcachedSessionLocator());
//		// SASL验证, 客户端授权验证授权验证,仅支持二进制协议
//		// builder.addAuthInfo(AddrUtil.getOneAddress("localhost:11213"),
//		// AuthInfo.typical("wy", "wy"));
//	}
//
//	/**
//	 * 获取MemcachedClient
//	 * 
//	 * @return
//	 */
//	public static MemcachedClient getMemcachedClient() {
//		try {
//			if (memcacheddClient == null) {
//				memcacheddClient = builder.build();
//				// 当选择用URL当key的时候，MemcachedClient会自动将URL encode再存储。默认是关闭的
//				memcacheddClient.setSanitizeKeys(true);
//				// memcached存储大数据的效率是比较低的，当数据比较大的时候xmemcached会帮你压缩在存储，取出来的时候自动解压并反序列化，这个大小阀值默认是16K
//				memcacheddClient.getTranscoder().setCompressionThreshold(32768);
//			}
//		} catch (IOException e) {
//			e.printStackTrace();
//			log.error("获取MemcachedClient失败!");
//		}
//		return memcacheddClient;
//	}
//
//	/**
//	 * 关闭MemcachedClient
//	 * 
//	 * @param memcachedClient
//	 */
//	public static void close(MemcachedClient memcachedClient) {
//		if (memcachedClient != null && !memcachedClient.isShutdown()) {
//			try {
//				memcachedClient.shutdown();
//			} catch (IOException e) {
//				e.printStackTrace();
//			}
//		}
//	}
}